import scrapy
from scrapy.http.response.html import HtmlResponse
from scrapy.selector.unified import Selector
from ..items import ScrapyOneItem

class OneSpider(scrapy.Spider):
    name = "one"
   
    allowed_domains = ["gushiwen.cn"]   #允许爬取的链接的域名,可以是多个
    start_urls = ["https://www.gushiwen.cn/default_1.aspx"]  #开始的地址
    index=0
    def my_print(self, msg):
        print('===========================================')
        print(msg)
        print('===========================================')

        #1.调用接口，解析数据
    def parse(self, response):
        #获取包含内容与标题的div
        # xpath返回的的集合中的都是Selector对象，可以链式xpath等操作，
        targetDivs= response.xpath("//div[@class='left']/div[@class='sons']")
        for targetDiv in targetDivs:
            #get 提取匹配到的第一个Selector对象的内容（内容不一定是文本，看调用了text()没）
            title = targetDiv.xpath('.//b/text()').get()
            #getall 相对get返回的是一个Selector对象列表对象的内容的列表
            source = targetDiv.xpath(".//p[@class='source']/a/text()").getall()
            dynasty = source[0]
            author = source[1]
            # 下面的//text()代表的是获取class='contson'下的所有子孙文本
            content_list = targetDiv.xpath(".//div[@class='contson']//text()").getall()
            content = "".join(content_list).strip()
            item=ScrapyOneItem(title=title,dynasty=dynasty,author=author,content=content)
            yield item  #yield会自动识别实例的原型，这里会 把数据传给pipelines.py

        #获取下一页的标签按钮
            #这个网站给的个值是不带域名的 /default_2.aspx  这样
            next_button =response.xpath("//a[@id='amore']/@href").get()
            if next_button: #如果有下一页的话才执行获取下一页的请求逻辑
                next_url= response.urljoin(next_button) #https://www.gushiwen.cn/default_2.aspx  根据目标域名进行拼接
                request= scrapy.Request(next_url)
                yield request  #yield会自动识别实例的原型，这里为Request的实例，会发送给调度器，调度器会再次发起请求

            
 
               
        
